<?php
class helper_autoinsert
{

	//通用修改
	/*
	 * @var QDB_ActiveRecord_Interface
	 */
	protected  $union_table = NULL; //关联数据表 exp Orders::meta()
	
	public  $Object = null; //为编辑时根据条件导入的对象
	public  $status = 'success';
	// exp: array('agent_id'=>array(1,2,4,5))
	public $limitArray = array();
	public $form_database_obj;
	/**
	 *
	 *2011-12-20-下午03:43:21 by 460932465
	 * @access 初始化...
	 * @param QDB_ActiveRecord_Interface $table
	 */
	function __construct(& $table)
	{
		$this->union_table = $table;
	}
	function __before_view()
	{
		return true;
	}
	
	function __before_post()
	{
		return true;
	}
	/**
	 * 设置限制字段
	 * @param exp: array('agent_id'=>array(1,2,4,5)) $array
	 */
	function setLimitKey($array)
	{
		$this->limitArray = $array;
	}
	/**
	 *
	 *2011-12-20-下午12:45:32 by 460932465
	 * @return 成功返回true 失败返回错误字符串
	 *
	 * @param Qform
	 * @param 主键列名 $pkname
	 * @param 附加数据 $appendData
	 */
	function add($form,$pkname,$appendData = NULL)
	{
		if (is_null($this->union_table))
		{
			$this->status = 'error';
			return '对不起,关联数据表未设置';
		}

		$Context = QContext::instance();
		$id = intval($Context->$pkname);
		$form_data = null;
		//如果是修改操作
		if($id)
		{
			$form_data = $this->union_table->find($id)->getone();
			$this->Object =  $form_data;
			if (!$form_data->id())
			{
				$this->status = 'error';
				return '不存在数据';
			}
		}

		//如果是GET 数据 存在 新加 || 编辑
		if ($Context->isGET())
		{
			if (!is_null($form_data) && !is_null($appendData))
			{
				$form_data = array_merge($form_data->toArray(),$appendData);
			}else if (!is_null($form_data))
			{
				$form_data = $form_data->toArray();
			}else if(!is_null($appendData))
			{
				$form_data = $appendData;
			}
			//存在数据
			if (!is_null($form_data))
			{
				$form->import($form_data);
			}
			
            //检查平行权限
            if(count($this->limitArray))
            {
                foreach ($this->limitArray as $filed => $limit)
                {
                	
                    if(isset($form_data[$filed]) && is_array($limit))
                    {
                        //如果存在过滤字段
                        if( !in_array($form_data[$filed], $limit))
                        {
                            $this->status = 'error';
                            exit ('权限不足1');
                        }
                    }
                }
            }
			return $form;
			//$this->_view['form'] = $form;
		}else if ($Context->isPOST())
		{
				
			if ($form->validate($_POST))
			{
                //检查平行权限
                if(count($this->limitArray))
                {
                    foreach ($this->limitArray as $filed => $limit)
                    {
                        if(isset($_POST[$filed]) && is_array($limit))
                        {
                            //如果存在过滤字段
                            if( !in_array($_POST[$filed], $limit))
                            {
                                $this->status = 'error';
                                exit ('权限不足2');
                            }
                        }
                    }
                }
				//获取内容
				$form_values = $form->values();
				//如果是新加入
				if (is_null($form_data))
				{
					$this->form_database_obj = $this->union_table->newObject($form_values);
				}else
				{
					$this->form_database_obj = $form_data->changeProps($form_values);
				}

				//开始更新 开启事务
				//QDB::getConn()->startTrans();
// 				try {
					$this->form_database_obj->save(); //默认99级
					//QDB::getConn()->completeTrans(true);
// 				} catch (Exception $e) {
					//失败回滚
					//QDB::getConn()->completeTrans(false);
					//返回错误
// 					$this->status = 'error';
// 					return ($e->getMessage());
// 				}
				return ('数据编辑成功');
			}else
			{//验证失败返回错误信息
				$this->status = 'error';
				// 参数校验返回
				foreach ($form->elements() as $element){
					if (!$element->isValid()){
						$err = implode(',', $element->errorMsg());
					}
				}
				return $err;
			}
		}

	}
}
?>